# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/8/15 0015 23:05
@Author : 测试开发工程师
@File : 1. 算法的性能评估.py
@Software: PyCharm
============================
"""

"""
算法性能评估

概论： 
    时间复杂度
    空间复杂度
    
时间复杂度：
    规模： 水 -> 水杯(大海，河流)  ->  水     数据的规模对算法至关重要
    测试环境： 手机 -> 电脑(在电脑上快) -> 手机   环境的快慢对算法至关重要
    
    大 O 表示法：
    def tmp(n):
        add = 0
        for i in range(n):
            add += i
        return add
    运行 T(n) = (2n+1) * unit # 代码行数 * unit ，一行为 一次 unit
    T(n) = O(f(n)), O表示 T(n) 与 f(n) 成正比
    O 表示渐进时间复杂度
    表示代码执行时间随数据规模增长的变化趋势
        当 n 很大时，低阶，常量，系数三部分 并不左右增长趋势，所以都可以忽略。就可以记为： T(n) = O(n); T(n) = O(n2)
        
    只关注循环次数多的代码：
      def tmp(n):
        add = 0
        for i in range(n):
            add += i
        return add
    O(n)
    
    选大量级：
        def tmp(n):
            for i in range(999):
                print(123)
            for i in range(n):
                print(1)
            for i in range(n):
                for j in range(n):
                    print(2)
    O(n^2)
    
    嵌套循环要乘积
    def tmp(n):
        for i in range(n):
            a(i)
    def a(n):
        for i in range(n):
            print('c')
     O(n^2)
     
    常见复杂度分析：
        非多顶式量级（过于低敛）： O(2^n) 和 O(n!)
        多顶式量级：O(1) O(logn) O(n) O(nlogn) O(n^k)
    
    
空间复杂度：
    渐进时间复杂度，表示算法的执行时间与数据规模之间的增长关系。
    类比一下，空间复杂度全称就是空间复杂度，表示算法的存储空间与数据规模之间的增长关系。
    
    def tmp(n):
        a = [1] * n
        for i in a:
            print(i)
    第二行是 O(n)

"""
